package com.server.store;

import com.server.store.context.UserManager;
import com.server.store.data.ApporteurManager;
import com.server.store.data.AssureManager;
import com.server.store.data.CompagnieManager;
import com.server.store.data.ContratManager;
import com.server.store.data.DataManager;
import com.server.store.data.GarantieManager;
import com.server.store.data.InterlocuteurManager;
import com.server.store.data.ProduitManager;
import com.server.store.data.PropositionManager;
import com.server.store.data.QuittanceManager;
import com.server.store.data.SinistreManager;
import com.server.store.data.TarificationManager;
import com.shared.data.IData;
import com.shared.data.TypeIData;
/**
 * Singleton pour la récupération des DAO de gestion des {@link IData} dans le store
 * @author queyroi
 *
 */
class DataManagerFactory {
	
	private static DataManagerFactory instance;
	
	private DataManagerFactory() {}
	/**
	 * 
	 * @return l'instance
	 */
	public final synchronized static DataManagerFactory get() {
		if(instance==null) instance = new DataManagerFactory();
		return instance;
	}
	/**
	 * Récupération du DAO voulu
	 * @param type {@link TypeIData}
	 * @return
	 */
	public DataManager<? extends IData> getDataManager(TypeIData type){
		switch (type) {
		case APPORTEUR:
			return new ApporteurManager();			
		case ASSURE:
			return new AssureManager();			
		case COMPAGNIE:
			return new CompagnieManager();			
		case CONTRAT:
			return new ContratManager();			
		case INTERLOCUTEUR:
			return new InterlocuteurManager();
		case GARANTIE:
			return new GarantieManager();			
		case PRODUIT:
			return new ProduitManager();			
		case QUITTANCE:
			return new QuittanceManager();			
		case SINISTRE:
			return new SinistreManager();			
		case TARIFICATION:
			return new TarificationManager();
		case USER:
			return new UserManager();
		case PROPOSITION:
			return new PropositionManager();
		default:
			throw new IllegalArgumentException("Mauvais type de format en entrée");
			
		}
	}
}
